#include<bits/stdc++.h>
using namespace std;

int s,len,n;
int ans=0;
int lens[10001];

int main(){
	cin>>n;
	memset(lens,0,sizeof(lens));
	for(int i=1;i<=n;i++){
		cin>>s>>len;
		int t=-1;
		while(t!=0){
			cin>>t;
			if(t!=0){
				lens[s]=max(lens[t]+len,lens[s]);
			}
			else{
				lens[s]=max(lens[s],len);
			}
		};
		ans=max(ans,lens[s]);
		//cout<<s<<' '<<lens[s]<<endl;
	}
	cout<<ans;
	return 0;
}

//#include<bits/stdc++.h>
//using namespace std;
//
//int s,len,n;
//int ans=0;
//vector<int> edges[10001];
//int ti[10001];
//int lens[10001];
//bool visit[10001];
//
//int main(){
//	cin>>n;
//	for(int i=1;i<=n;i++){
//		cin>>s>>len;
//		lens[s]=len;
//		int t=-1;
//		while(t!=0){
//			cin>>t;
//			if(t!=0) edges[t].push_back(s);
//		}
//	}
//	memset(visit,false,sizeof(visit));
//	memset(ti,0,sizeof(ti));
//	queue<int> que;
//	for(int i=1;i<=n;i++){
//		if(!visit[i]){
//			ti[i]=0;
//			que.push(i);
//			while(!que.empty()){
//				int x=que.front();
//				que.pop();
//				for(auto& j:edges[x]){
//					ti[j]=max(ti[j],ti[x]+lens[x]);
//					ans=max(ans,ti[j]);				
//					que.push(j);
//				}
//				if(edges[x].empty()){
//					ans=max(ans,ti[x]+lens[x]);
//				}
//			};
//		}
//	}
//	cout<<ans;
//	return 0;
//}


//#include<bits/stdc++.h>
//using namespace std;
//
//int s,len,n;
//int ans=0;
//vector<int> edges[10005];
//int lens[10005];
//bool visit[10005];
//
//int main(){
//	cin>>n;
//	for(int i=1;i<=n;i++){
//		cin>>s>>len;
//		lens[s]=len;
//		int t=-1;
//		while(t!=0){
//			cin>>t;
//			if(t!=0) edges[t].push_back(s);
//		}
//	}
//	//
//	memset(visit,false,sizeof(visit));
//	queue<int> que;
//	int cura=0,cur=0;
//	for(int i=1;i<=n;i++){
//		if(!visit[i]){
//			cura=0;
//			que.push(i);
//			visit[i]=true;
//			while(!que.empty()){
//				cur=0;
//				int size=que.size();
//				for(int j=0;j<size;j++){
//					int x=que.front();
//					que.pop();
//					cur=max(cur,lens[x]);
//					for(auto& k:edges[x]){
//						if(!visit[k]){
//							que.push(k);
//							visit[k]=true;
//						}
//					}
//				}
//				cura+=cur; 
//			};
//			ans=max(ans,cura);
//		};
//	}
//	cout<<ans;
//	return 0;
//}
